Spring JDBC-তে Caching ডাটাবেসের সাথে সংযুক্তির ফ্রিকোয়েন্সি এবং লোড কমাতে ব্যবহৃত হয়। Caching ডাটাবেস থেকে ফ্রিকোয়েন্টলি অ্যাক্সেস করা ডেটা স্টোর করে রাখে এবং প্রয়োজন অনুযায়ী তা দ্রুত সরবরাহ করে।
Spring JDBC-তে Caching সাধারণত Ehcache, Caffeine, Hazelcast, বা Spring Cache Abstraction ব্যবহার করে ইমপ্লিমেন্ট করা যায়।
Spring Cache Abstraction একটি ফ্রেমওয়ার্ক-অ্যাগনস্টিক কনফিগারেশন প্রদান করে। এটি ডাটাবেস থেকে প্রাপ্ত ডেটাকে একটি ইন-মেমরি ক্যাশে সংরক্ষণ করে এবং পুনরায় ডেটাবেস কল এড়ায়।
@Cacheable
, @CachePut
, এবং @CacheEvict
অ্যানোটেশন ব্যবহার করা।Maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>3.x.x</version>
</dependency>
Spring Boot-এ Caching চালু করতে @EnableCaching
অ্যানোটেশন ব্যবহার করুন।
@Configuration
@EnableCaching
public class CacheConfig {
@Bean
public CacheManager cacheManager() {
return new ConcurrentMapCacheManager("users"); // Cache name: "users"
}
}
Ehcache ব্যবহার করলে, একটি ehcache.xml
ফাইল তৈরি করুন।
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.ehcache.org/v3">
<cache alias="users">
<heap unit="entries">100</heap>
<expiry>
<ttl unit="seconds">600</ttl> <!-- Cache 10 মিনিটের জন্য বৈধ -->
</expiry>
</cache>
</config>
Spring Integration:
@Configuration
@EnableCaching
public class EhCacheConfig {
@Bean
public JCacheManagerCustomizer cacheManagerCustomizer() {
return cm -> cm.createCache("users", new MutableConfiguration<>()
.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(Duration.ofMinutes(10)))
.setStoreByValue(false));
}
}
@Service
public class UserService {
@Autowired
private JdbcTemplate jdbcTemplate;
@Cacheable(value = "users", key = "#id") // Cache data with key = id
public User getUserById(int id) {
String sql = "SELECT * FROM users WHERE id = ?";
return jdbcTemplate.queryForObject(sql, new Object[]{id},
new BeanPropertyRowMapper<>(User.class));
}
}
কোড ব্যাখ্যা:
value
: ক্যাশের নাম।key
: নির্দিষ্ট রেকর্ডের জন্য কী।@CacheEvict(value = "users", key = "#id") // Clear cache for a specific user
public void deleteUserById(int id) {
String sql = "DELETE FROM users WHERE id = ?";
jdbcTemplate.update(sql, id);
}
কোড ব্যাখ্যা:
@CacheEvict
: ডেটাবেস থেকে ডেটা ডিলিট করার পর ক্যাশ থেকে সংশ্লিষ্ট ডেটাও মুছে ফেলে।@CachePut(value = "users", key = "#user.id") // Update cache with the latest data
public User updateUser(User user) {
String sql = "UPDATE users SET name = ?, email = ? WHERE id = ?";
jdbcTemplate.update(sql, user.getName(), user.getEmail(), user.getId());
return user;
}
কোড ব্যাখ্যা:
@CachePut
: ডেটাবেস এবং ক্যাশ উভয়েই নতুন ডেটা আপডেট করে।@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public ResponseEntity<User> getUserById(@PathVariable int id) {
return ResponseEntity.ok(userService.getUserById(id));
}
@DeleteMapping("/{id}")
public ResponseEntity<String> deleteUserById(@PathVariable int id) {
userService.deleteUserById(id);
return ResponseEntity.ok("User deleted and cache cleared.");
}
@PutMapping("/{id}")
public ResponseEntity<User> updateUser(@PathVariable int id, @RequestBody User user) {
user.setId(id);
return ResponseEntity.ok(userService.updateUser(user));
}
}
Spring JDBC-তে Caching ব্যবহারের মাধ্যমে ডেটাবেস অপারেশন দ্রুত এবং কার্যকর করা যায়। @Cacheable
, @CachePut
, এবং @CacheEvict
অ্যানোটেশন ব্যবহার করে সহজেই কাস্টমাইজড ক্যাশিং যুক্ত করা যায়। ছোট থেকে মাঝারি প্রজেক্টের জন্য এটি খুবই কার্যকর। বড় প্রজেক্টে কাস্টম Caching সমাধান বা Distributed Cache (যেমন Redis, Hazelcast) ব্যবহারের প্রয়োজন হতে পারে।
Read more